Preemption & non-preemption scheduling

선점형과 비선점형 스케쥴러
선점형 스케쥴러(Preemptive Scheduling)
    하나의 프로세스가 다른 프로세스 대신에 프로세서(CPU)를 차지할 수 있음
비선점형 스케쥴러(Non-preemptive Scheduling)
    하나의 프로세스가 끝나지 않으면, 다른 프로세스는 CPU를 사용할 수 없음(시분할 불가)
    프로세스가 wait(block)이나 end 상태일 때만 다음 프로세스 처리
OS #12 선점형과 비선점형 스케쥴러
선점형과 비선점형 차이
비선점형: 프로세스가 자발적으로 blocking 상태로 들어가거나, 실행이 끝났을 때(end)만, 다른 프로세스로 교체 가능
선점형의 경우 running 상태에서 해당 시간이 지나면, ready상태로 변환

선점형: 프로세스 running 중에 스케쥴러가 이를 중단시키고, 다른 프로세스로 교체 가능
    running state -> ready state
    최신의 스케쥴러는 대부분 선점형 스케쥴러이다.

비선점 프로세스의 경우 응답시간이 길어질 수 있는 단점이 있다.
스케쥴러 구분
FIFO(FCFS), SJF, Priority-based는 어떤 프로세스를 먼저 실행시킬지에 대한 알고리즘(비선점형 스케쥴러)
RoundRobin은 시분할 시스템을 위한 기본 알고리즘(선점형 알고리즘)

ready state, running state, block state 각각에 다른 알고리즘을 적용해서 구현 할 수 있다.

1. 우선순위 기반(정적)
2. 선점형 비선점형
3. 시분할 단위
4. 프로세스 상태

ex) 쉘과 같은 경우 높은 우선 순위를 가지고 있어서 사용자 입장에서 매우 짧은 응답시간을 가지고 있음
참고)
랙: 마우스/ 키보드 반응이 느린 경우
    스케쥴러가 해결해야 하는 이슈!
    다양하고 복잡한 스케쥴링 알고리즘 필요
-> 리눅스 스케쥴러: I(1), CFS 와 같이 다양한 방식으로 변경 시도 중
        인터렉티브(쉘), IO, CPU 중심 프로세스로 미리 구분할 수 있다면, 보다 개선된 스케쥴링이 가능